﻿using System;
using System.Collections.Generic;
using System.ComponentModel.Design;
using System.Diagnostics;
using System.Linq;
using System.Text;
using System.Windows.Forms;

namespace Core
{
    class IncludesCollectionEditor : CollectionEditor
    {
        public IncludesCollectionEditor(Type type) : base(type)
        {
            Trace.WriteLine("PhoneNumbersCollectionEditor() ctor");
        }

        /// <summary>
        /// Перекрытый метод создания формы редактора - 
        /// для сохранения/восстановления размеров и положения окна
        /// </summary>
       
        protected override CollectionForm CreateCollectionForm()
        {
            CollectionForm collform = base.CreateCollectionForm();

            // подключаем свой обработчик открытия и в нем 
            // восстанавливаем положение и размер окна
            collform.Load += delegate(object sender, EventArgs e)
            {
                System.Diagnostics.Trace.WriteLine("collform.Load()");
                collform.HelpButton = false;

                collform.Text = "Включения и параметры проекта";
                
                

                Label BlaBlaProperties = new Label();
                string MembersText = "&Включения:";
                string PropertiesText = "&Включения:";

                // перебираем все control-ы на форме и заменяем
                // неправильные надписи
                foreach (Control ctrl in collform.Controls)
                {
                    foreach (Control ctrl1 in ctrl.Controls)
                    {
                        if (ctrl1.GetType().ToString() == "System.Windows.Forms.Label"
                          && (ctrl1.Text == "&Members:" || ctrl1.Text == "&Члены:"))
                        {
                            ctrl1.Text = MembersText;
                        }

                        if (ctrl1.GetType().ToString() == "System.Windows.Forms.Label"
                          && (ctrl1.Text.Contains("&properties")
                          || ctrl1.Text.Contains("&Cвойства")))
                        {
                            BlaBlaProperties = (Label)ctrl1;
                            BlaBlaProperties.Text = PropertiesText;
                        }

                        if (ctrl1.GetType().ToString()
                          == "System.ComponentModel.Design.CollectionEditor+FilterListBox")
                        {
                            // это самый правильный обработчик, но после него
                            // срабатывает обработчик формы и меняет надпись на свою
                            //((ListBox)ctrl1).SelectedValueChanged +=
                            //  delegate(object sndr, EventArgs ea)
                            //  {
                            //    Trace.WriteLine("SelectedValueChanged()");
                            //    BlaBlaProperties.Text = PropertiesText ;
                            //  };

                            // вместо одного правильного - два обходных - 
                            // на смену индекса в листбоксе
                            ((ListBox)ctrl1).SelectedIndexChanged +=
                              delegate(object sndr, EventArgs ea)
                              {
                                  BlaBlaProperties.Text = PropertiesText;
                              };
                        }

                        if (ctrl1.GetType().ToString()
                          == "System.Windows.Forms.Design.VsPropertyGrid")
                        {
                            // и на редактирование в PropertyGrid
                            ((PropertyGrid)ctrl1).SelectedGridItemChanged +=
                              delegate(Object sndr, SelectedGridItemChangedEventArgs segichd)
                              {
                                  BlaBlaProperties.Text = PropertiesText;
                              };

                            // также сделать доступным окно с подсказками по параметрам 
                            // в нижней части
                            ((PropertyGrid)ctrl1).HelpVisible = true;
                            ((PropertyGrid)ctrl1).HelpBackColor =
                              System.Drawing.SystemColors.Info;
                        }

                    }
                }
       
            };

            return collform;
        }

    }
}
